package com.lekang.web.controller.system;



import com.lekang.common.annotation.Anonymous;
import com.lekang.system.service.EmailService;
import com.lekang.web.util.R;
import com.lekang.web.util.VerifyCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@CrossOrigin
@RestController
public class SendMailController {
    @Autowired
    private EmailService emailService;

    // 注入 Redis 模板（用于存储验证码）
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    // 验证码过期时间：5分钟（可根据需求调整）
    private static final long CODE_EXPIRE_MINUTES = 5;
    // Redis 中验证码的键前缀（避免键冲突）
    private static final String CODE_REDIS_KEY_PREFIX = "email:verify:";


    /**
     * 原有：通用邮件发送接口（保留）
     */
    @GetMapping()
    public R sendMail(
            @RequestParam String email,
            @RequestParam String title,
            @RequestParam String content) {
        try {
            emailService.sendEmail(email, title, content);
            System.out.println("通用邮件发送成功，收件人：" + email);
            return R.ok("邮件发送成功");
        } catch (Exception e) {
            System.err.println("通用邮件发送失败：" + e.getMessage());
            return R.error("邮件发送失败：" + e.getMessage());
        }
    }


    /**
     * 新增：发送邮箱验证码接口（用于登录）
     * 前端调用此接口获取验证码，无需传 title 和 content（后端固定）
     */
    @Anonymous
    @PostMapping("/sendVerifyCode")
    public R sendEmailVerifyCode(@RequestParam String email) {
        try {
            // 1. 生成6位随机验证码
            String verifyCode = VerifyCodeUtils.generateEmailCode();

            // 2. 组装邮件内容（固定标题和模板，用户只需接收验证码）
            String emailTitle = "【乐康养老】登录验证码";
            String emailContent = String.format(
                    "尊敬的用户：\n您好！您正在使用邮箱登录乐康系统，您的验证码为：\n\n%s\n\n请在5分钟内输入验证码完成登录，验证码仅一次有效，请勿泄露给他人。",
                    verifyCode
            );

            // 3. 调用已有 EmailService 发送验证码邮件
            emailService.sendEmail(email, emailTitle, emailContent);

            // 4. 存储验证码到 Redis（键：email:verify:xxx@xxx.com，值：验证码，过期时间5分钟）
            String redisKey = CODE_REDIS_KEY_PREFIX + email;
            stringRedisTemplate.opsForValue().set(redisKey, verifyCode, CODE_EXPIRE_MINUTES, TimeUnit.MINUTES);

            System.out.println("验证码邮件发送成功，收件人：" + email + "，验证码：" + verifyCode);
            return R.ok("验证码已发送至您的邮箱，5分钟内有效");

        } catch (Exception e) {
            System.err.println("验证码邮件发送失败：" + e.getMessage());
            return R.error("验证码发送失败，请检查邮箱格式或稍后重试");
        }
    }
}